import type { App } from "vue";
// 使用createWebHistory，路由的url就是http://localhost:9000/topic/topicManage，如果把前端的文件打包成dist放到后端代码中，后端代码跟前端用的一个端口，导致刷新页面访问的不是前端的路由，而是后端的url，从而报错404
// 使用createWebHashHistory，路由的url就是http://localhost:9000/#/topic/topicManage，这时刷新该url就不会报错404了，走的是前端的路由，而不是后端的url
import { createRouter, createWebHashHistory, RouteRecordRaw,Router } from "vue-router";
import RootRouter from './root'; // 根路径转发路由
import { useUsersStore } from "../store/user";
import { useRouteStore } from "../store/route";

const modules = import.meta.glob('./module/*.ts', { eager: true });

// 所有菜单RouteRecordRaw路由的集合
export const publicRoutes = getModulesRoutes(modules);

/** 处理全部导入的路由模块 */
export function getModulesRoutes(modules: Record<string, any>) {
  const routes: RouteRecordRaw[] = [];
  Object.keys(modules).forEach((key: string) => {
    routes.push(modules[key].default);
  });
  return routes;
}

export const rootRoute: Array<RouteRecordRaw> = [ RootRouter ];

// 创建路由
export const router = createRouter({
  history: createWebHashHistory(),
  routes: rootRoute
});

// 导出setupRouter，在main.ts中需要setup路由
export async function setupRouter(app: App)  {
  app.use(router);
  createRouterGuard(router);
  await router.isReady();
};

export function createRouterGuard(router: Router) {
  const userStore = useUsersStore();
  const routeStore = useRouteStore();
  router.beforeEach(async (to, from, next) =>{
    // 访问登录页，有token不做跳转，没有跳转登录页
    if (to.path === '/') {
      return next();
    }
    // token不存在，跳登录页
    if (!userStore.$state.token) {
      return next({ path: '/', query: { redirect: to.fullPath } });
    }

    // 未初始化路由，等待执行
    if (!routeStore.isInitRoute) {
      routeStore.initRoute();
      return next({ path: to.fullPath, replace: true, query: to.query, hash: to.hash });
    }
    next();
  })
}